﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Windows.Forms;
using HeliTracking.Properties;
using MITI;
using MapControl;
using MapControl.Misc;
using MapLib;
using MapWinGIS;
using Point = System.Drawing.Point;

namespace GPSMap
{
    public partial class frmGPSTracking : Form
    {
        private frmGPSInfo frmInfo;

        private ImageList imgList = new ImageList();

        //private ComPort GeneralClass.objPort;
        public ucMap mapControl;
        public AxMapWinGIS.AxMap AxMap1;

        public ucToolStrip objToolStripControl;

        private ucGPSData gpsDataControl;

        public bool isShowGPSData = true;
        public bool isShowRoute = true;

        public frmGPSTracking()
        {
            InitializeComponent();
            //Use SQL Server
            //BaseDB.g_ConnectStr = @"Data Source=.\SQLEXPRESS;Initial Catalog=gpsplane;Integrated Security=True";
            //Use SQL Ce
            BaseDBCe.g_ConnectStr = Resources.ConnectString;
            //BaseDBCe.Upgrade();

            //Load Map            
            mapControl = new ucMap();
            mapControl.Dock = DockStyle.Fill;
            panelMap.Controls.Add(mapControl);

            AxMap1 = mapControl.AxMap1;
            objToolStripControl = new ucToolStrip(AxMap1);
            objToolStripControl.Dock = DockStyle.Top;
            this.Controls.Add(objToolStripControl);

            this.Controls.Add(this.menuStrip1);

            GeneralClass.objPort = new ComPort(Properties.Settings.Default.PortName, Properties.Settings.Default.BaudRate, Properties.Settings.Default.StopBits, Properties.Settings.Default.DataBits, Properties.Settings.Default.Parity, true);
            GeneralClass.objPort.comPort_DataReceivedEvent += new SerialDataReceivedEventHandler(comPort_DataReceived);

            mapControl.AxMap_MouseDownEvent += new AxMapWinGIS._DMapEvents_MouseDownEventHandler(AxMap_MouseDownEvent);
            mapControl.AxMap_DrawBackBuffer += new AxMapWinGIS._DMapEvents_OnDrawBackBufferEventHandler(AxMap_DrawBackBuffer);
            mapControl.AxMap_MouseMoveEvent += new AxMapWinGIS._DMapEvents_MouseMoveEventHandler(AxMap_MouseMoveEvent);
            mapControl.AxMap_MouseUpEvent += new AxMapWinGIS._DMapEvents_MouseUpEventHandler(AxMap_MouseUpEvent);
            //mapControl.AxMap_MouseWheelEvent += new AxMapXLib.CMapXEvents_MouseWheelEventHandler(AxMap_MouseWheelEvent);

            
        }

        private void frmGPSTracking_Load(object sender, EventArgs e)
        {
            InitImageList();

            frmInfo = new frmGPSInfo(this);
            frmInfo.TopMost = true;
            //frmTest = new frmTestCOMPort(GeneralClass.objPort);

            //Khởi tạo tọa độ 9x9 đã lưu mặc định
            string value = Properties.Settings.Default.Coord9x9;
            mapControl.Coord9x9.BigSquareArray = value.Split(new char[] { '|' });
            //ToolStripSetup();
            //AxMap1.Layers["AsiaMap"].Visible = false;
            bảnĐồ1ToolStripMenuItem_Click(null, null);
            biểnĐảoToolStripMenuItem_Click(null,null);
            hiểnThịTọaĐộBayToolStripMenuItem_Click(null, null);
            hiểnThịQuỹĐạoBayToolStripMenuItem_Click(null, null);
            hiểnThịThôngTinQuỹĐạoToolStripMenuItem_Click(null, null);
            bảngTheoDõiToolStripMenuItem_Click(null, null);
            //hiểnThịTốiƯuTốcĐộToolStripMenuItem_Click(null, null);
            //Load database;
            LoadDatabase();

            
            gpsDataControl = new ucGPSData(this, GeneralClass.objPort);
            gpsDataControl.Dock = DockStyle.Fill;
            panelFunction.Controls.Add(gpsDataControl);
        }

        public void InitImageList()
        {
            //// Create the ImageList
            imgList.ImageSize = new Size(18, 16);
            imgList.ColorDepth = ColorDepth.Depth4Bit;
            imgList.TransparentColor = Color.FromArgb(192, 192, 192);
            imgList.Images.AddStrip(Resources.buttons);
        }

        #region COM Port

        /// <summary>
        /// 
        /// </summary>
        /// <param name="text"></param>
        delegate void SetTextCallback(string text);
        //private void SetText(string text)
        //{
        //    // InvokeRequired required compares the thread ID of the
        //    // calling thread to the thread ID of the creating thread.
        //    // If these threads are different, it returns true.
        //    if (this.dataGridViewGPSData.InvokeRequired)
        //    {
        //        SetTextCallback d = new SetTextCallback(SetText);
        //        this.Invoke(d, new object[] { text });
        //    }
        //    else
        //    {
                
        //    }
        //}

        private GPSPoint lastPoint;
        public void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (!isOptimize)
            {
                if (GeneralClass.dbTestGPS.Rows.Count > 0)
                {
                    GeneralClass.currGPSData = GeneralClass.GetGPSData(AxMap1,
                                                                       GeneralClass.dbTestGPS.Rows[
                                                                           GeneralClass.dbTestGPS.Rows.Count - 1]);
                    mapControl.Refresh();
                }
            }
            else
            {
                Graphics g = AxMap1.CreateGraphics();
                foreach (GPSPoint gps in GeneralClass.objPort.gpsPointList)
                {
                    if (lastPoint != null)
                        lastPoint.Draw(g, Color.Blue);

                    //Nếu là hiển thị lộ trình thì tiếp tục vẽ thêm line
                    if (isShowRoute)
                    {
                        //Nếu có lastPoint thì vẽ line
                        if (lastPoint != null)
                            gps.DrawRoute(g, lastPoint);
                    }

                    //Nếu là hiển thị tọa độ thì tiếp tục vẽ thêm node không cần refresh
                    if (isShowGPSData)
                    {
                        gps.Draw(g, Color.Blue);
                    }

                    //Vẽ tọa độ hiện hành
                    if (GeneralClass.currGPSData != null)
                    {
                        GeneralClass.currGPSData.Draw(g, Color.Red);
                        //Lưu lại tọa độ last sau khi vẽ xong
                        lastPoint = GeneralClass.currGPSData;
                    }
                }
            }
        }

        #endregion

        #region AxMap



        public void AxMap_DrawBackBuffer(object sender, AxMapWinGIS._DMapEvents_OnDrawBackBufferEvent e)
        {
            if (mapControl.Altitude < 10000)
            {
                //IntPtr hdc = new IntPtr(e.hOutputDC);
                Graphics g = Graphics.FromHdc(new IntPtr(e.backBuffer));
                if (!isOptimize)
                {
                    //Nếu chọn hiển thị tọa độ và hiển thị lộ trình
                    if (isShowGPSData || isShowRoute)
                    {
                        if (GeneralClass.dbTestGPS.Rows.Count > 0)
                        {
                            GPSPoint lastGPSPoint = GeneralClass.GetGPSData(AxMap1,
                                                                            GeneralClass.dbTestGPS.Rows[0]);
                            ////Chỉ vẽ lại 10000 tọa độ mới nhất
                            //if (GeneralClass.dbTestGPS.Rows.Count > 5000)
                            //{

                            //}

                            foreach (DataRow dr in GeneralClass.dbTestGPS.Rows)
                            {
                                GPSPoint gpsPoint = GeneralClass.GetGPSData(AxMap1, dr);
                                //pointList.Add(gpsPoint.CenterPoint);

                                //Nếu vẽ tọa độ
                                if (isShowGPSData)
                                {
                                    //Bỏ qua nếu là tọa độ hiện hành (tọa độ đang chọn hoặc tọa độ mới nhất)
                                    if (!gpsPoint.Equals(GeneralClass.currGPSData))
                                    {
                                        gpsPoint.Draw(g);
                                    }
                                    else
                                        GeneralClass.currGPSData.DrawCurrPoint(g);
                                }

                                //Nếu vẽ lộ trình
                                if (isShowRoute)
                                {
                                    GeneralClass.currGPSData.DrawCurrPoint(g);
                                    gpsPoint.DrawRoute(g, lastGPSPoint);
                                }
                                //Lưu lại tọa độ gần nhất
                                lastGPSPoint = gpsPoint;
                            }

                        }
                    }
                    else
                    {
                        //Hiển thị máy bay đang chọn
                        //if (GeneralClass.currGPSData != null)
                        //{
                        GeneralClass.currGPSData.DrawCurrPoint(g);
                        //}
                    }

                }
                else
                {
                    foreach (DataRow dr in GeneralClass.dbTestGPS.Rows)
                    {
                        if (lastPoint != null)
                            lastPoint.Draw(g, Color.Blue);
                        GPSPoint gps = GeneralClass.GetGPSData(AxMap1, dr);

                        //Nếu là hiển thị lộ trình thì tiếp tục vẽ thêm line
                        if (isShowRoute)
                        {
                            //Nếu có lastPoint thì vẽ line
                            if (lastPoint != null)
                                gps.DrawRoute(g, lastPoint);
                        }

                        //Nếu là hiển thị tọa độ thì tiếp tục vẽ thêm node không cần refresh
                        if (isShowGPSData)
                        {
                            gps.Draw(g, Color.Blue);
                        }

                        //Vẽ tọa độ hiện hành
                        if (GeneralClass.currGPSData != null)
                        {
                            GeneralClass.currGPSData.Draw(g, Color.Red);
                            //Lưu lại tọa độ last sau khi vẽ xong
                            lastPoint = GeneralClass.currGPSData;
                        }
                    }
                }
                //g.ReleaseHdc(hdc);
                g.Dispose();
            }
        }

        public void AxMap_MouseDownEvent(object sender, AxMapWinGIS._DMapEvents_MouseDownEvent e)
        {
            if (e.button == 1)
            {
                PointF pScreen = new PointF(e.x, e.y);
                Graphics g =  AxMap1.CreateGraphics();

                for (int i = 0; i < GeneralClass.dbTestGPS.Rows.Count; i++)
                {
                    GPSPoint objGPS = GeneralClass.GetGPSData(AxMap1, GeneralClass.dbTestGPS.Rows[i]);
                    //Nếu click trúng vào vị trí GPS thì hiển thị form
                    if (objGPS.HitTest(pScreen) == 0 &&
                        AxMap1.CursorMode == tkCursorMode.cmSelection)
                    {
                        //Tọa độ hiện tại cũ vẽ lại màu xanh
                        //GeneralClass.currGPSData.Draw(g);
                        //Gán tọa độ hiện tại mới
                        //GeneralClass.currGPSData = objGPS;
                        //mapControl.Refresh();
                        //Tô màu đỏ
                        //GeneralClass.currGPSData.DrawCurrPoint(g);
                        IsShowGPSInfo(true);
                        frmInfo.ShowInfo(objGPS);
                    }
                }
                g.Dispose();

            }
        }


        public void AxMap_MouseMoveEvent(object sender, AxMapWinGIS._DMapEvents_MouseMoveEvent e)
        {
            UpdateToolStrip(e.x, e.y);
            //if (isShowGPSInfo && e.button == 0)
            //{
            //    PointF pScreen = new PointF(e.x, e.y);
            //    Graphics g = AxMap1.CreateGraphics();

            //    for (int i = 0; i < GeneralClass.dbTestGPS.Rows.Count; i++)
            //    {
            //        GPSPoint objGPS = GetGPSData(GeneralClass.dbTestGPS.Rows[i]);
            //        //Nếu click trúng vào vị trí GPS thì hiển thị form
            //        if (objGPS.HitTest(pScreen) == 0 &&
            //            AxMap1.CurrentTool == MapXLib.ToolConstants.miArrowTool)
            //        {
            //            //Tọa độ hiện tại cũ vẽ lại màu xanh
            //            GeneralClass.currGPSData.Draw(g);
            //            //Gán tọa độ hiện tại mới
            //            GeneralClass.currGPSData = objGPS;
            //            //Tô màu đỏ
            //            GeneralClass.currGPSData.DrawCurrPoint(g);


            //            frmInfo.ShowInfo(objGPS);
            //            frmInfo.Show();

            //            //string result = string.Format("Tên = {0}\n Kinh độ = {1}\n Vĩ độ = {2}\n Độ cao= {3}\n Tốc độ = {4}\n Hướng={5}",
            //            //    objGPS.Name,
            //            //    objGPS.LonGPS.ToString(),
            //            //    objGPS.LatGPS.ToString(),
            //            //    objGPS.Alt.ToString("#,#"),
            //            //    objGPS.Speed.ToString(),
            //            //    objGPS.Angle.ToString()
            //            //    );
            //            //MessageBox.Show(result);
            //        }
            //    }
            //    g.Dispose();

            //}
        }

        public void AxMap_MouseUpEvent(object sender, AxMapWinGIS._DMapEvents_MouseUpEvent e)
        {
            //UpdateToolStrip(e.x, e.y);
            
        }

        //private void AxMap_MouseWheelEvent(object sender, AxMapXLib.CMapXEvents_MouseWheelEvent e)
        //{
        //    UpdateToolStrip(e.x, e.y);
        //}
        #endregion

        public bool isDataFilter = false;
        public void LoadDatabase()
        {
            //GeneralClass.currGPSData = null;
            string sql = "select * from gpsdata";
            GeneralClass.dbTestGPS = BaseDBCe.ExecSql_DataSet(sql).Tables[0];
            if (GeneralClass.dbTestGPS.Rows.Count > 0)
                GeneralClass.currGPSData = GeneralClass.GetGPSData(AxMap1, GeneralClass.dbTestGPS.Rows[GeneralClass.dbTestGPS.Rows.Count - 1]);
            mapControl.Refresh();
        }

        public void DeleteAllData()
        {
            //GeneralClass.currGPSData = null;
            string sql = "delete from gpsdata";
            BaseDBCe.ExecSql_NoneQuery(sql);
            LoadDatabase();
        }

        public void UpdateToolStrip(float x, float y)
        {
            PointF pScreenF = new PointF(x, y);
            //Hiển thị tọa độ Longitude, Latitude
            double lon, lat;
            lon = lat = 0;
            AxMap1.PixelToProj(x, y, ref lon, ref lat);
            toolStripStatusLabelCoordinate.Text = string.Format("K:{0} | V:{1}", GeneralClass.DecimalToDMS(lon), GeneralClass.DecimalToDMS(lat));
            toolStripStatusLabelCoordinate2.Text = string.Format("(K:{0} | V:{1})", lon.ToString("#.####0"), lat.ToString("#.####0"));
            toolStripStatusLabelAltitude.Text = string.Format("Độ cao: {0} km", mapControl.Altitude.ToString("#,#"));
            toolStripStatusLabelCoord9x9.Text = string.Format("Tọa độ 9x9: {0}", mapControl.Coord9x9.GetCoordinate(pScreenF));
        }

        #region "ToolStripMenu"

        private void tọaĐộ9x9ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            mapControl.ShowCoordinate9x9 = !mapControl.ShowCoordinate9x9;
            if (mapControl.ShowCoordinate9x9)
            {
                string value = Properties.Settings.Default.Coord9x9;
                mapControl.Coord9x9.BigSquareArray = value.Split(new char[] { '|' });
                tọaĐộ9x9ToolStripMenuItem.Image = imgList.Images[20];
                mapControl.Refresh();
                mapControl.Coord9x9.Draw(AxMap1.CreateGraphics());
            }
            else
            {
                tọaĐộ9x9ToolStripMenuItem.Image = null;
                mapControl.Refresh();
            }

        }

        private void địaDanhToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //string layername = "TENTPHO";
            //AxMap1.Layers[layername].Visible = !AxMap1.Layers[layername].Visible;
            ////AxMap1.Layers["TENTPHO"].LabelProperties.Style.TextFont = ".VnArial";
            //AxMap1.Layers[layername].AutoLabel = AxMap1.Layers[layername].Visible;
            //if (AxMap1.Layers[layername].Visible)
            //    địaDanhToolStripMenuItem.Image = imgList.Images[20];
            //else
            //    địaDanhToolStripMenuItem.Image = null;
        }

        private int ShowHideLayer(int layerHandle, string filePath)
        {
            if (layerHandle < 0)
                layerHandle = AddLayer(filePath);

            bool isVisible = AxMap1.get_LayerDynamicVisibility(layerHandle);

            AxMap1.MapUnits = tkUnitsOfMeasure.umDecimalDegrees;
            AxMap1.set_LayerMinVisibleScale(layerHandle, 1000);
            AxMap1.set_LayerMaxVisibleScale(layerHandle, 1000000);    // to get current scale use AxMap.CurrentScale
            AxMap1.set_LayerDynamicVisibility(layerHandle, !isVisible);
            AxMap1.Redraw();

            return layerHandle;
        }
        private int bienDaoLayerHandle = -1;
        private void biểnĐảoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            bienDaoLayerHandle = ShowHideLayer(bienDaoLayerHandle, @"Maps\BienDao.shp");
            bool isVisible = AxMap1.get_LayerDynamicVisibility(bienDaoLayerHandle);
            if (isVisible)
                biểnĐảoToolStripMenuItem.Image = imgList.Images[20];
            else
                biểnĐảoToolStripMenuItem.Image = null;

            //string layername = "BIENDAO";
            //AxMap1.Layers[layername].Visible = !AxMap1.Layers[layername].Visible;
            ////AxMap1.Layers["TENTPHO"].LabelProperties.Style.TextFont = ".VnArial";
            //AxMap1.Layers[layername].AutoLabel = AxMap1.Layers[layername].Visible;
            //if (AxMap1.Layers[layername].Visible)
            //    biểnĐảoToolStripMenuItem.Image = imgList.Images[20];
            //else
            //    biểnĐảoToolStripMenuItem.Image = null;
        }

        private void sânBayToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //string layername = "SANBAY";
            //AxMap1.Layers[layername].Visible = !AxMap1.Layers[layername].Visible;
            //if (AxMap1.Layers[layername].Visible)
            //    sânBayToolStripMenuItem.Image = imgList.Images[20];
            //else
            //    sânBayToolStripMenuItem.Image = null;
        }

        private void cấuHìnhCổngCOMToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmCOMSetting frm = new frmCOMSetting();
            frm.ShowDialog();
        }

        private void mởKếtNốiToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Mở kết nối
            try
            {
                GeneralClass.objPort.PortName = Properties.Settings.Default.PortName;
                GeneralClass.objPort.BaudRate = Properties.Settings.Default.BaudRate;
                GeneralClass.objPort.StopBits = Properties.Settings.Default.StopBits;
                GeneralClass.objPort.DataBits = Properties.Settings.Default.DataBits;
                GeneralClass.objPort.Parity = Properties.Settings.Default.Parity;
                GeneralClass.objPort.comPortOpen();
                toolStripStatusLabelCOMStatus.Text = string.Format("Cổng {0} đã được mở...", GeneralClass.objPort.PortName);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Xảy ra lỗi sau khi kết nối:\n" + ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void đóngKếtNốiToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //đóng kết nối
            try
            {
                GeneralClass.objPort.comPortClose();
                toolStripStatusLabelCOMStatus.Text = "Chưa kết nối...";

            }
            catch (Exception ex)
            {
                MessageBox.Show("Xảy ra lỗi sau khi kết nối:\n" + ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        //private void testDữLiệuCổngCOMToolStripMenuItem_Click(object sender, EventArgs e)
        //{
        //    //if (!frmTest.Connected){
        //    //    MessageBox.Show("Chưa mở cổng COM");
        //    //    return;
        //    //}
        //    //frmTest.Show();
            
        //}

        private void cấuHìnhTọaĐộ9x9ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmConfig9x9 frm = new frmConfig9x9();
            frm.Show();
        }


        private void tỉnhThànhToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //string layerName = "TINH";
            //AxMap1.Layers[layerName].Visible = !AxMap1.Layers[layerName].Visible;
            //if (AxMap1.Layers[layerName].Visible)
            //    tỉnhThànhToolStripMenuItem.Image = imgList.Images[20];
            //else
            //    tỉnhThànhToolStripMenuItem.Image = null;
        }

        private int AddLayer(string filePath)
        {
            MapWinGIS.Shapefile sfworld1 = new ShapefileClass();
            sfworld1.Open(filePath);
            int layerHandle = AxMap1.AddLayer(sfworld1, true);

            string value = AxMap1.get_LayerKey(layerHandle);
            //Set Filling color of the ploygon shapefile
            AxMap1.set_ShapeLayerFillColor(layerHandle,
                (UInt32)(System.Drawing.ColorTranslator.ToOle
                        (System.Drawing.Color.Gray)));

            //Set the line color
            AxMap1.set_ShapeLayerLineColor(layerHandle,
                (UInt32)(System.Drawing.ColorTranslator.ToOle
                        (System.Drawing.Color.DarkGoldenrod)));
            //Set the line width
            //axMap1.set_ShapeLayerLineWidth(intHandler1, 5);
            AxMap1.CtlBackColor = Color.Gray;

            return layerHandle;
        }

        private int vietNameLayerHandle = -1;
        private void bảnĐồ1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            vietNameLayerHandle = ShowHideLayer(vietNameLayerHandle, @"Maps\VietNam.shp");
            bool isVisible = AxMap1.get_LayerDynamicVisibility(vietNameLayerHandle);
            if (isVisible)
                bảnĐồ1ToolStripMenuItem.Image = imgList.Images[20];
            else
                bảnĐồ1ToolStripMenuItem.Image = null;
        }

        private void bảnĐồ2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //string layerName = "AsiaMap";
            //AxMap1.Layers[layerName].Visible = !AxMap1.Layers[layerName].Visible;
            //if (AxMap1.Layers[layerName].Visible)
            //    bảnĐồ2ToolStripMenuItem.Image = imgList.Images[20];
            //else
            //    bảnĐồ2ToolStripMenuItem.Image = null;
        }

        private void bảngTheoDõiToolStripMenuItem_Click(object sender, EventArgs e)
        {
            panelFunction.Visible = !panelFunction.Visible;
            splitter1.Visible = panelFunction.Visible;
            if (panelFunction.Visible)
            {
                panelFunction.Width = 435;
                bảngTheoDõiToolStripMenuItem.Image = imgList.Images[20];
            }
            else
            {
                bảngTheoDõiToolStripMenuItem.Image = null;
            }

            //frmGPSData objFrmGpsData = new frmGPSData(this, GeneralClass.objPort);
            //objFrmGpsData.StartPosition = FormStartPosition.Manual;
            //objFrmGpsData.Location = new Point(this.ClientSize.Width - objFrmGpsData.Width - 10, 80);
            //objFrmGpsData.TopMost = true;
            //objFrmGpsData.Show();
        }
        

        private void hiểnThịQuỹĐạoBayToolStripMenuItem_Click(object sender, EventArgs e)
        {
            isShowRoute = !isShowRoute;
            if (isShowRoute)
            {
                hiểnThịQuỹĐạoBayToolStripMenuItem.Image = imgList.Images[20];
                //hiểnThịQuỹĐạoBayToolStripMenuItem.Text = "Ẩn quỹ đạo bay";
            }
            else
            {
                hiểnThịQuỹĐạoBayToolStripMenuItem.Image = null;
                //hiểnThịQuỹĐạoBayToolStripMenuItem.Text = "Hiển thị quỹ đạo bay";
            }
            mapControl.Refresh();
        }

        private void hiểnThịTọaĐộBayToolStripMenuItem_Click(object sender, EventArgs e)
        {
            isShowGPSData = !isShowGPSData;
            if (isShowGPSData)
            {
                hiểnThịTọaĐộBayToolStripMenuItem.Image = imgList.Images[20];
                //hiểnThịTọaĐộBayToolStripMenuItem.Text = "Ẩn tọa độ bay";
            }
            else
            {
                hiểnThịTọaĐộBayToolStripMenuItem.Image = null;
                //hiểnThịTọaĐộBayToolStripMenuItem.Text = "Hiển thị tọa độ bay";
            }
            mapControl.Refresh();
        }

        private bool isShowGPSInfo = true;
        public void IsShowGPSInfo(bool value)
        {
            isShowGPSInfo = !value;
            hiểnThịThôngTinQuỹĐạoToolStripMenuItem_Click(null, null);

        }
        private void hiểnThịThôngTinQuỹĐạoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            isShowGPSInfo = !isShowGPSInfo;
            if (isShowGPSInfo)
            {
                hiểnThịThôngTinQuỹĐạoToolStripMenuItem.Image = imgList.Images[20];
                try
                {
                    if (frmInfo == null)
                        frmInfo = new frmGPSInfo(this);

                    frmInfo.StartPosition = FormStartPosition.Manual;
                    frmInfo.Location = new Point(this.ClientSize.Width - frmInfo.Width - 10, this.ClientSize.Height - frmInfo.Height - 10);
                    frmInfo.Show();
                }
                catch
                {
                    frmInfo = new frmGPSInfo(this);
                    frmInfo.StartPosition = FormStartPosition.Manual;
                    frmInfo.Location = new Point(this.ClientSize.Width - frmInfo.Width - 10, this.ClientSize.Height - frmInfo.Height - 10);
                    frmInfo.Show();
                }
                
                //hiểnThịTọaĐộBayToolStripMenuItem.Text = "Ẩn tọa độ bay";
            }
            else
            {
                hiểnThịThôngTinQuỹĐạoToolStripMenuItem.Image = null;
                //Point p = frmInfo.Location;
                try
                {
                    frmInfo.Hide();    
                }
                catch
                {
                    frmInfo = null;
                }
                
                //hiểnThịTọaĐộBayToolStripMenuItem.Text = "Hiển thị tọa độ bay";
            }
            mapControl.Refresh();
        }
        #endregion

        private void toolStripButtonDistance_Click(object sender, EventArgs e)
        {

        }

        private bool isOptimize = false;
        private void hiểnThịTốiƯuTốcĐộToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Chức năng này chưa cập nhật");
            return;
            isOptimize = !isOptimize;
            //isOptimize = false;
            if (isOptimize)
            {
                hiểnThịTốiƯuTốcĐộToolStripMenuItem.Image = imgList.Images[20];
                //hiểnThịTọaĐộBayToolStripMenuItem.Text = "Ẩn tọa độ bay";
            }
            else
            {
                hiểnThịTốiƯuTốcĐộToolStripMenuItem.Image = null;
                //hiểnThịTọaĐộBayToolStripMenuItem.Text = "Hiển thị tọa độ bay";
            }
            mapControl.Refresh();
        }

        private void toolStripButtonLatestGPS_Click(object sender, EventArgs e)
        {
            if (GeneralClass.currGPSData != null)
            {
                //AxMap1.ZoomTo(AxMap1.Zoom, GeneralClass.currGPSData.LonGPS, GeneralClass.currGPSData.LatGPS);
            }
        }

        private void bảngTheoDõiCũToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //frmGPSData objFrmGpsData = new frmGPSData(this, GeneralClass.objPort);
            //objFrmGpsData.StartPosition = FormStartPosition.Manual;
            //objFrmGpsData.Location = new Point(this.ClientSize.Width - objFrmGpsData.Width - 10, 80);
            //objFrmGpsData.TopMost = true;
            //objFrmGpsData.Show();
        }
    }
}